package com.YK.retryer.annotation;

import java.lang.annotation.*;
import java.util.concurrent.TimeUnit;

/**
 * @Author yuank
 * @Package com.YK.retryer.annotation
 *
 * @description: 请在spring-bean的方法上使用
 *
 */
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface YKRetryMethod {
    /**
     * 自定义重试间隔
     */
    // 具体的时间迭代逻辑器名字(原型bean)
    String timeIntervalName();
    // 重试次数和时间间隔
    int maxAttempts() default 3;
    int time() default 2;
    TimeUnit timeUnit() default TimeUnit.SECONDS;

    /**
     * 自定义重试判断逻辑
     */
    // 自定义普通结果重试判断逻辑器名字(原型bean)
    String normalResultPredicateName() default "ObjectResultListPredicate";
    // 自定义异常结果重试判断逻辑器名字(原型bean)
    String throwResultPredicateName() default "ObjectResultListPredicate";
    // 执行返回的结果值 和抛出的异常 -重试判断逻辑器的数据来源
    String[] result() default {};
    //Class[] resultClass() default {}; -统一作为String进行配对无需类型指定
    Class<? extends Throwable>[] exception() default {};


    // 涉及的bean: 监听器bean || 线程池bean
    String listerName() default "";
    String async() default "";
}
